Digital systems often employ a cyclical redundancy check ("CRC") of data transferred by the system for error detection and correction of digital data. Present digital systems have error correction systems which generally require a fixed data transfer protocol to implement error detection and correction.
For example, in computer systems, data is transferred according to a predetermined protocol and a CRC is performed on each byte transferred. Raw data is passed through a CRC module which provides CRC bit information associated with each byte of raw data. This CRC bit information may be concatenated with the raw data and transferred with the raw data. The raw data and CRC bit information are then received. The CRC bit information is stored in a buffer and an error detection module performs another CRC on the raw data. If the newly generated CRC bit information matches the CRC bit information stored in the buffer, then the receiver has correctly received each bit of the raw data and there is no error correction necessary. If the CRC bit information does not match, then an error has been detected and the receiver can perform error correction accordingly.
For systems with small throughput, such error correction may be performed regularly on a fixed protocol, since the processing overhead of performing such correction is minimal. However, for systems with large data volumes, the overhead of a fixed and inflexible error correction system may greatly impair throughput.
Additionally, some forms of digital data do not require error correction, since the information is required to be processed in real time and the loss of some of the raw data is not particularly detrimental to the operation of the system. One example is digitized speech applications. In this case, error correction is unnecessary overhead which diminishes throughput.
Therefore, there is a need in the art for a high speed error correction system. The error correction system should also be programmable, so that raw data passing through the system may optionally be checked or not checked as the situation demands. Such a system should be flexible to handle differing data protocols without having to perform hardware modifications.